package com.cskaoyan.javase.homework.day18;

import java.io.*;
import java.util.Arrays;

/**
 * @description:
 * @author: songtao@cskaoyan.onaliyun.com
 **/

/*
在一个磁盘的文件里保存26个英文小写字母（乱序）
        比如: rsztuvijxypbmnocklwaefghdq
        将他们读入内存中进行字典排序(abcd...)
        把排好顺序的字母序列再重新追加写到磁盘的该文件中。(注意要先换一行再追加)
 */
public class ComprehensiveDemo {
    public static void main(String[] args) {
        // method1  使用的是字节流
        method1();

        // method2 使用的是字符流
        // method2();
    }

    private static void method1() {
        // try-with-resources
        try (FileInputStream in = new FileInputStream("a.txt");
             FileOutputStream out = new FileOutputStream("a.txt", true)) {
            // 创建字节数组
            byte[] bytes = new byte[26];
            // 把数据读入字节数组
            int readCount = in.read(bytes);
            // 对字节数组进行排序
            Arrays.sort(bytes);
            // 字节数组转为字符串
            String s = new String(bytes, 0, readCount);
            // 换行并追加写入
            out.write("\r\n".getBytes());
            out.write(s.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void method2() {
        // try-catch-finally
        BufferedReader br = null;
        FileWriter fileWriter = null;
        try {
            br = new BufferedReader(new FileReader("a.txt"));
            fileWriter = new FileWriter("a.txt", true);
            // 读取一行数据
            String s = br.readLine();
            // 字符串转为字符数组
            char[] chars = s.toCharArray();
            // 排序
            Arrays.sort(chars);
            // 生成排序后新的字符串
            String newStr = new String(chars);
            // 换行并追加写入
            fileWriter.write("\r\n");
            fileWriter.write(newStr);
            // 记得刷新
            fileWriter.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 判断是否为null
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br != null) {

                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
